home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / Threads.p < prev    next >
Text File  |  1996-05-01  |  8KB  |  242 lines

  1. {
  2.      File:        Threads.p
  3.  
  4.      Contains:    Thread Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT Threads;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __THREADS__}
  28. {$SETC __THREADS__ := 1}
  29.  
  30. {$I+}
  31. {$SETC ThreadsIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __ERRORS__}
  35. {$I Errors.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MEMORY__}
  38. {$I Memory.p}
  39. {$ENDC}
  40.  
  41. {$PUSH}
  42. {$ALIGN MAC68K}
  43. {$LibExport+}
  44.  
  45. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  46. {  Thread states  }
  47.  
  48. TYPE
  49.     ThreadState                            = INTEGER;
  50.  
  51. CONST
  52.     kReadyThreadState            = 0;
  53.     kStoppedThreadState            = 1;
  54.     kRunningThreadState            = 2;
  55.  
  56. {  Error codes have been meoved to Errors.(pah)  }
  57. {  Thread environment characteristics  }
  58.  
  59. TYPE
  60.     ThreadTaskRef                        = Ptr;
  61. {  Thread characteristics  }
  62.     ThreadStyle                            = LONGINT;
  63.  
  64. CONST
  65.     kCooperativeThread            = $00000001;
  66.     kPreemptiveThread            = $00000002;
  67.  
  68. {  Thread identifiers  }
  69.  
  70. TYPE
  71.     ThreadID                            = LONGINT;
  72.  
  73. CONST
  74.     kNoThreadID                    = 0;
  75.     kCurrentThreadID            = 1;
  76.     kApplicationThreadID        = 2;
  77.  
  78. {  Options when creating a thread  }
  79.  
  80. TYPE
  81.     ThreadOptions                        = LONGINT;
  82.  
  83. CONST
  84.     kNewSuspend                    = $01;
  85.     kUsePremadeThread            = $02;
  86.     kCreateIfNeeded                = $04;
  87.     kFPUNotNeeded                = $08;
  88.     kExactMatchThread            = $10;
  89.  
  90. {  Information supplied to the custom scheduler  }
  91.  
  92. TYPE
  93.     SchedulerInfoRecPtr = ^SchedulerInfoRec;
  94.     SchedulerInfoRec = RECORD
  95.         InfoRecSize:            LONGINT;
  96.         CurrentThreadID:        ThreadID;
  97.         SuggestedThreadID:        ThreadID;
  98.         InterruptedCoopThreadID: ThreadID;
  99.     END;
  100.  
  101. {$IFC GENERATING68K AND GENERATINGCFM }
  102. {
  103.     The following UniversalProcPtrs are for CFM-68k compatiblity with
  104.     the implementation of the Thread Manager.
  105. }
  106.     ThreadEntryProcPtr                    = UniversalProcPtr;
  107.     ThreadSchedulerProcPtr                = UniversalProcPtr;
  108.     ThreadSwitchProcPtr                    = UniversalProcPtr;
  109.     ThreadTerminationProcPtr            = UniversalProcPtr;
  110.     DebuggerNewThreadProcPtr            = UniversalProcPtr;
  111.     DebuggerDisposeThreadProcPtr        = UniversalProcPtr;
  112.     DebuggerThreadSchedulerProcPtr        = UniversalProcPtr;
  113. {$ELSEC}
  114. {
  115.     The following ProcPtrs cannot be interchanged with UniversalProcPtrs because
  116.     of differences between 680x0 and PowerPC runtime architectures with regard to
  117.     the implementation of the Thread Manager.
  118. }
  119. {  Prototype for thread's entry (main) routine  }
  120.     voidPtr                                = Ptr;
  121.     ThreadEntryProcPtr = ProcPtr;  { FUNCTION ThreadEntry(threadParam: UNIV Ptr): voidPtr; }
  122.  
  123. {  Prototype for custom thread scheduler routine  }
  124.     ThreadSchedulerProcPtr = ProcPtr;  { FUNCTION ThreadScheduler(schedulerInfo: SchedulerInfoRecPtr): ThreadID; }
  125.  
  126. {  Prototype for custom thread switcher routine  }
  127.     ThreadSwitchProcPtr = ProcPtr;  { PROCEDURE ThreadSwitch(threadBeingSwitched: ThreadID; switchProcParam: UNIV Ptr); }
  128.  
  129. {  Prototype for thread termination notification routine  }
  130.     ThreadTerminationProcPtr = ProcPtr;  { PROCEDURE ThreadTermination(threadTerminated: ThreadID; terminationProcParam: UNIV Ptr); }
  131.  
  132. {  Prototype for debugger NewThread notification  }
  133.     DebuggerNewThreadProcPtr = ProcPtr;  { PROCEDURE DebuggerNewThread(threadCreated: ThreadID); }
  134.  
  135. {  Prototype for debugger DisposeThread notification  }
  136.     DebuggerDisposeThreadProcPtr = ProcPtr;  { PROCEDURE DebuggerDisposeThread(threadDeleted: ThreadID); }
  137.  
  138. {  Prototype for debugger schedule notification  }
  139.     DebuggerThreadSchedulerProcPtr = ProcPtr;  { FUNCTION DebuggerThreadScheduler(schedulerInfo: SchedulerInfoRecPtr): ThreadID; }
  140.  
  141. {$ENDC}
  142. {  Thread Manager routines  }
  143. FUNCTION CreateThreadPool(threadStyle: ThreadStyle; numToCreate: INTEGER; stackSize: Size): OSErr;
  144.     {$IFC NOT GENERATINGCFM}
  145.     INLINE $303C, $0501, $ABF2;
  146.     {$ENDC}
  147. FUNCTION GetFreeThreadCount(threadStyle: ThreadStyle; VAR freeCount: INTEGER): OSErr;
  148.     {$IFC NOT GENERATINGCFM}
  149.     INLINE $303C, $0402, $ABF2;
  150.     {$ENDC}
  151. FUNCTION GetSpecificFreeThreadCount(threadStyle: ThreadStyle; stackSize: Size; VAR freeCount: INTEGER): OSErr;
  152.     {$IFC NOT GENERATINGCFM}
  153.     INLINE $303C, $0615, $ABF2;
  154.     {$ENDC}
  155. FUNCTION GetDefaultThreadStackSize(threadStyle: ThreadStyle; VAR stackSize: Size): OSErr;
  156.     {$IFC NOT GENERATINGCFM}
  157.     INLINE $303C, $0413, $ABF2;
  158.     {$ENDC}
  159. FUNCTION ThreadCurrentStackSpace(thread: ThreadID; VAR freeStack: LONGINT): OSErr;
  160.     {$IFC NOT GENERATINGCFM}
  161.     INLINE $303C, $0414, $ABF2;
  162.     {$ENDC}
  163. FUNCTION NewThread(threadStyle: ThreadStyle; threadEntry: ThreadEntryProcPtr; threadParam: UNIV Ptr; stackSize: Size; options: ThreadOptions; VAR threadResult: UNIV Ptr; VAR threadMade: ThreadID): OSErr;
  164.     {$IFC NOT GENERATINGCFM}
  165.     INLINE $303C, $0E03, $ABF2;
  166.     {$ENDC}
  167. FUNCTION DisposeThread(threadToDump: ThreadID; threadResult: UNIV Ptr; recycleThread: BOOLEAN): OSErr;
  168.     {$IFC NOT GENERATINGCFM}
  169.     INLINE $303C, $0504, $ABF2;
  170.     {$ENDC}
  171. FUNCTION YieldToThread(suggestedThread: ThreadID): OSErr;
  172.     {$IFC NOT GENERATINGCFM}
  173.     INLINE $303C, $0205, $ABF2;
  174.     {$ENDC}
  175. FUNCTION YieldToAnyThread: OSErr;
  176.     {$IFC NOT GENERATINGCFM}
  177.     INLINE $42A7, $303C, $0205, $ABF2;
  178.     {$ENDC}
  179. FUNCTION GetCurrentThread(VAR currentThreadID: ThreadID): OSErr;
  180.     {$IFC NOT GENERATINGCFM}
  181.     INLINE $303C, $0206, $ABF2;
  182.     {$ENDC}
  183. FUNCTION GetThreadState(threadToGet: ThreadID; VAR threadState: ThreadState): OSErr;
  184.     {$IFC NOT GENERATINGCFM}
  185.     INLINE $303C, $0407, $ABF2;
  186.     {$ENDC}
  187. FUNCTION SetThreadState(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): OSErr;
  188.     {$IFC NOT GENERATINGCFM}
  189.     INLINE $303C, $0508, $ABF2;
  190.     {$ENDC}
  191. FUNCTION SetThreadStateEndCritical(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): OSErr;
  192.     {$IFC NOT GENERATINGCFM}
  193.     INLINE $303C, $0512, $ABF2;
  194.     {$ENDC}
  195. FUNCTION SetThreadScheduler(threadScheduler: ThreadSchedulerProcPtr): OSErr;
  196.     {$IFC NOT GENERATINGCFM}
  197.     INLINE $303C, $0209, $ABF2;
  198.     {$ENDC}
  199. FUNCTION SetThreadSwitcher(thread: ThreadID; threadSwitcher: ThreadSwitchProcPtr; switchProcParam: UNIV Ptr; inOrOut: BOOLEAN): OSErr;
  200.     {$IFC NOT GENERATINGCFM}
  201.     INLINE $303C, $070A, $ABF2;
  202.     {$ENDC}
  203. FUNCTION SetThreadTerminator(thread: ThreadID; threadTerminator: ThreadTerminationProcPtr; terminationProcParam: UNIV Ptr): OSErr;
  204.     {$IFC NOT GENERATINGCFM}
  205.     INLINE $303C, $0611, $ABF2;
  206.     {$ENDC}
  207. FUNCTION ThreadBeginCritical: OSErr;
  208.     {$IFC NOT GENERATINGCFM}
  209.     INLINE $303C, $000B, $ABF2;
  210.     {$ENDC}
  211. FUNCTION ThreadEndCritical: OSErr;
  212.     {$IFC NOT GENERATINGCFM}
  213.     INLINE $303C, $000C, $ABF2;
  214.     {$ENDC}
  215. FUNCTION SetDebuggerNotificationProcs(notifyNewThread: DebuggerNewThreadProcPtr; notifyDisposeThread: DebuggerDisposeThreadProcPtr; notifyThreadScheduler: DebuggerThreadSchedulerProcPtr): OSErr;
  216.     {$IFC NOT GENERATINGCFM}
  217.     INLINE $303C, $060D, $ABF2;
  218.     {$ENDC}
  219. FUNCTION GetThreadCurrentTaskRef(VAR threadTRef: ThreadTaskRef): OSErr;
  220.     {$IFC NOT GENERATINGCFM}
  221.     INLINE $303C, $020E, $ABF2;
  222.     {$ENDC}
  223. FUNCTION GetThreadStateGivenTaskRef(threadTRef: ThreadTaskRef; threadToGet: ThreadID; VAR threadState: ThreadState): OSErr;
  224.     {$IFC NOT GENERATINGCFM}
  225.     INLINE $303C, $060F, $ABF2;
  226.     {$ENDC}
  227. FUNCTION SetThreadReadyGivenTaskRef(threadTRef: ThreadTaskRef; threadToSet: ThreadID): OSErr;
  228.     {$IFC NOT GENERATINGCFM}
  229.     INLINE $303C, $0410, $ABF2;
  230.     {$ENDC}
  231. {$ENDC}
  232. {$ALIGN RESET}
  233. {$POP}
  234.  
  235. {$SETC UsingIncludes := ThreadsIncludes}
  236.  
  237. {$ENDC} {__THREADS__}
  238.  
  239. {$IFC NOT UsingIncludes}
  240.  END.
  241. {$ENDC}
  242.